package com.ksyun.start.camp.controller;

import com.ksyun.start.camp.model.ApiResponse;
import com.ksyun.start.camp.service.SimpleTimeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

@RestController
@RequestMapping("/api")
public class ServiceController {

    // 在此实现简单时间服务的接口逻辑
    @Value("${spring.application.name}")
    private String serverName;

    @Value("${server.port}")
    private Integer port;

    @Autowired
    SimpleTimeService simpleTimeService;

    /**
     * 获取当前日期时间信息及节点信息
     *
     * 此接口接受一个参数，style，决定返回何种样式的日期格式，其可能的取值为：
     * - full - 完整格式，形如 2023-07-25 12:34:56
     * - date - 只含有日期部分，如 2023-07-25
     * - time - 只含有时间部分，如 12:34:56
     * - unix - Unix 时间戳（带毫秒），如 1690251417000
     * 此接口返回的时间，时区都是格林尼治标准时间（GMT）
     *
     * @param style 决定日期时间格式的参数
     * @return 返回当前日期时间信息及节点信息
     */
    @GetMapping("/getDateTime")
    public ApiResponse getDateTime(@RequestParam(required = false) String style) throws UnknownHostException {
        String result;
        if (StringUtils.isEmpty(style)) {
            result = simpleTimeService.getDateTime("full");
        } else {
            result = simpleTimeService.getDateTime(style);
        }

        InetAddress localHost = InetAddress.getLocalHost();
        String ipAddress = localHost.getHostAddress();
        String serviceId = serverName + "_" + ipAddress + "_" + port;

        Map<String, String> response = new LinkedHashMap<>();
        response.put("result", result);
        response.put("serviceId", serviceId);

        return new ApiResponse<>(200, response);
    }
}
